package com.learn.a06_2_inventory.data

import kotlinx.coroutines.flow.Flow

/**
 * 离线数据仓库实现类（基于本地数据库）
 * 职责：通过 [ItemDao] 实现 [ItemsRepository] 接口定义的数据操作
 * 特征：
 * - 构造函数注入数据访问对象 [ItemDao]
 * - 所有操作最终委托给 DAO 执行
 */
class OfflineItemsRepository(private val itemDao: ItemDao) : ItemsRepository {
    /**
     * 从本地数据库获取所有数据项流
     * @return 直接返回 [ItemDao.getAllItems] 的查询结果流
     */
    override fun getAllItemsStream(): Flow<List<Item>> = itemDao.getAllItems()

    /**
     * 根据 ID 从本地数据库获取单个数据项流
     * @param id 数据项唯一标识
     * @return 直接返回 [ItemDao.getItem] 的查询结果流
     */
    override fun getItemStream(id: Int): Flow<Item?> = itemDao.getItem(id)

    /**
     * 向本地数据库插入数据项
     * @param item 委托给 [ItemDao.insert] 执行插入操作
     */
    override suspend fun insertItem(item: Item) = itemDao.insert(item)

    /**
     * 从本地数据库删除数据项
     * @param item 委托给 [ItemDao.delete] 执行删除操作
     */
    override suspend fun deleteItem(item: Item) = itemDao.delete(item)

    /**
     * 更新本地数据库中的数据项
     * @param item 委托给 [ItemDao.update] 执行更新操作
     */
    override suspend fun updateItem(item: Item) = itemDao.update(item)
}
